package com.example.dao;

import com.example.entity.FileInfo;
import com.example.vo.FileInfoVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * 文件信息数据访问层接口
 * 主要职责：
 * 1. 管理文件元数据信息（含基础属性/分类关联/存储信息等）
 * 2. 提供多维条件组合查询能力（支持文件名/分类/ID过滤）
 * 3. 维护文件与分类目录的关联关系（通过type_info表关联）
 * 4. 支持文件检索与统计（用于文件管理系统核心功能）
 */
@Repository
public interface FileInfoDao extends Mapper<FileInfo> {

    /**
     * 组合条件查询文件信息（支持多维度过滤）
     *
     * @param name   文件名关键词（支持模糊查询，传"all"查询全部）
     * @param typeId 分类ID（精确过滤，0表示不筛选分类）
     * @param id     文件ID（精确查询，0表示不按ID筛选）
     * @return {@link List<FileInfoVo>} 文件信息视图对象列表（包含分类名称等关联信息）
     *
     * @implNote 对应XML中的<select id="findByNameAndId">实现：
     * 1. 左连接type_info表获取分类名称
     * 2. 动态拼接查询条件：
     *    - 文件名模糊查询（LIKE %value%）
     *    - 分类ID精确过滤
     *    - 文件ID精确查询
     * 3. 默认按文件ID升序排列
     */
    List<FileInfoVo> findByNameAndId(@Param("name") String name,
                                     @Param("typeId") Long typeId,
                                     @Param("id") Long id);
}